// 题目链接：https://leetcode.cn/problems/hanota-lcci/

class Solution
{
public:
    void hanota(vector<int> &A, vector<int> &B, vector<int> &C)
    {
        dfs(A, B, C, A.size()); // 函数头，A柱借助B柱将盘子放到C柱
    }
    void dfs(vector<int> &A, vector<int> &B, vector<int> &C, int n)
    {
        if (n == 1)
        {
            C.push_back(A.back());
            A.pop_back();
            return;
        }
        // 1. 将A柱上的n-1个盘子借助C柱放到B-1上
        dfs(A, C, B, n - 1);
        // 2. 将A柱上的剩余一个盘子放到C柱上
        C.push_back(A.back());
        A.pop_back();
        // 3. 将B柱上的盘子放到C柱上（进入递归子问题）<先将B柱上的n-1个盘子借助C放到B上...>
        dfs(B, A, C, n - 1);
    }
};